#ifndef PUDGE_UI_EVENTS_HPP
#define PUDGE_UI_EVENTS_HPP

#include <vector>

namespace pudge { namespace ui {

	struct mouse_event
	{
		typedef unsigned int uint;

		union 
		{
			struct
			{
				uint hover			: 1;
				uint left_down		: 1;
				uint left_up		: 1;
				uint right_down		: 1;
				uint right_up		: 1;
				uint center_down	: 1;
				uint center_up		: 1;
				uint wheel_up		: 1;
				uint wheel_down		: 1;
				uint wheel_foward	: 1;
				uint wheel_backward : 1;

				// modifiers 

				uint shift		: 1;
				uint alt		: 1;
				uint ctrl		: 1;
			};
			uint bits;
		};

		long x, y, delta;

		mouse_event()
			:	bits(0)
			,	x(0)
			,	y(0)
			,	delta(0) {}
	};

	struct key_event
	{
		typedef unsigned int uint;

		union
		{
			struct
			{
				uint up		: 1;
				uint down	: 1;

				// modifiers

				uint shift	: 1;
				uint alt	: 1;
				uint ctrl	: 1;
			};
			uint bits;
		};

		char key;

		long x, y;
	
		key_event()
			:	bits(0)
			,	x(0)
			,	y(0) {}	
	};
}}

#endif